home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / lang_c / msqc25t1 / appmenu.c next >
C/C++ Source or Header  |  1990-09-29  |  4KB  |  133 lines

  1. /* APPMENU.C: MENUING SKELETON FOR A HYPOTHETICAL APPLICATION */
  2. /*  SHOWING CURSOR CONTROL IN MENU SELECTION. */
  3.  
  4. /* INCLUDES */
  5. #include <stdio.h>
  6. #include <dos.h>
  7. #include <conio.h>
  8. #include "textscrn.h"
  9. #include "popup.h"
  10.  
  11. /* DEFINES */
  12. #define CR  13
  13. #define F1  59
  14. #define UP  72
  15. #define LEFT 75
  16. #define RITE 77
  17. #define DOWN 80
  18. #ifndef TRUE
  19. #define FALSE 0
  20. #define TRUE !FALSE
  21. #endif
  22.  
  23. /* LOCAL FUNCTIONS */
  24. void process (POPUP*);
  25. void run (int);
  26. void help (void);
  27.  
  28. /* MENU TEXT DEFINITION */
  29. char menutext[]= "  ** MAIN MENU **\n Accounts payable\n Receivables\n\
  30.     Payroll & Personnel\n General ledger\n Quit";
  31.  
  32. /* POP-UP DEFINITIONS */
  33. POPUP menu = { 4, 31, 9, 50, 2, BLACK, RED, CYAN, BLACK, menutext};
  34. POPUP jobid = {17, 31, 21, 47, 1, RED, 0, GREEN, 0};
  35. POPUP helps = { 7, 34, 13, 76, 1, LTGRAY, 0, MAGENTA, 0};
  36. /*----------------------------------------------------------------*/
  37.  
  38. main()
  39. {
  40.     /* Set up base screen */
  41.     _savescrn (0);
  42.     _setbordwindow (1, 1, 25, 80, 0, YELLOW, BLACK);
  43.     _settextposition (1, 27);
  44.     _outtext ("The Empire Corporation, Inc.");
  45.  
  46.     /* Run the program */
  47.     popShow (&menu);            /* display menu */
  48.     process (&menu);            /* process choices */
  49.     _restscrn (0);              /* Clean up and quit */
  50. } /*----------------------------------------------------------*/
  51.  
  52. void process (POPUP *menu)      /* Process main menu choices */
  53. {
  54.     int indic = 2, looping = TRUE;
  55.     char key;
  56.  
  57.         do {
  58.             popHilite (menu, indic);        /* hilite indic selection */
  59.             key = getch ();                 /* get a keystroke */
  60.             popNormal (menu, indic);        /* un-hilite selection */
  61.             switch (toupper (key)) {        /* act on keystroke */
  62.  
  63.                 /* If an alpha selection */
  64.                 case 'A': run (1); indic = 2; break;
  65.                 case 'R': run (2); indic = 3; break;
  66.                 case 'P': run (3); indic = 4; break;
  67.                 case 'G': run (4); indic = 5; break;
  68.                 case 'Q': looping = FALSE; break;
  69.  
  70.                 /* If user hit Enter on current selection */
  71.                 case CR :   if (indic != 6)
  72.                                 run (indic-1);          /* run indic task */
  73.                             else
  74.                                 looping = FALSE;        /* or quit */
  75.                             break;
  76.  
  77.                 /* If user hit a function or cursor key */
  78.                 case 0  :   key = getch ();             /* get second byte */
  79.                             switch (key) {              /* act on it */
  80.                                 case F1 : help (); break;
  81.                                 case UP :
  82.                                 case LEFT: if (--indic == 1)
  83.                                                 indic = 6; /* wrap down */
  84.                                                 popHilite (menu, indic);
  85.                                                 break;
  86.                                 case DOWN:
  87.                                 case RITE: popNormal (menu, indic);
  88.                                             if (++indic == 7)
  89.                                                 indic = 2;  /* wrap up */
  90.                                             popHilite (menu, indic);
  91.                                             break;
  92.                             } /* end of nested switch */
  93.             } /* end of outer switch */
  94.         } while (looping);
  95. } /*----------------------------------------------------------*/
  96.  
  97. void run (int job) /* Simulate running the menu selection */
  98. {
  99.     char mssg [20], key;
  100.  
  101.     _savescrn (0);                          /* save screen */
  102.     popShow (&jobid);                       /* pop up job indent window */
  103.     sprintf (mssg, "Running job %d", job);
  104.     popCenter (&jobid, 2, mssg);            /* identify job number */
  105.     popCenter (&jobid, 4, "Press any key...");
  106.     key = getch();                              /* wait for keypress */
  107.     if (key == 0) getch ();                     /* ignore extended key */
  108.     _restscrn (0);                              /* delete pop-up */
  109. } /*--------------------------------*/
  110.  
  111.  
  112.  
  113.  
  114. void help (void)                    /* Pop up help panel if F1 is pressed */
  115. {
  116.     char mssg [40], key;
  117.  
  118.     _savescrn (0);                  /* save screen */
  119.     popShow (&helps);
  120.     popCenter (&helps, 1, "** H E L P **");
  121.     popCenter (&helps, 3, "Select by typing first letter, or");
  122.     sprintf (mssg, "Move up with %c or %c, down with %c or %c,",
  123.                 24, 27, 25, 26);
  124.     popCenter (&helps, 4, mssg);
  125.     sprintf (mssg, "then press %c%c", 17, 217);
  126.     popCenter (&helps, 5, mssg);
  127.     popCenter (&helps, 7, "Press any key to resume . . .");
  128.     key = getch();                              /* wait for keypress */
  129.     if (key == 0) getch ();                     /* ignore extended key */
  130.     _restscrn (0);                              /* restore screen */
  131. } /*--------------------------------*/
  132.  
  133.